<template>
	<view class="container">
		<!-- 标题 -->
		<view class="title">扫码核销</view>

		<!-- 显示扫码结果 -->
		<view class="result" v-if="scanResult">
			<p>扫码结果：</p>
			<p>{{ scanResult }}</p>
		</view>

		<!-- 显示解析后的参数 -->
		<view class="parsed-params" v-if="parsedParams && Object.keys(parsedParams).length">
			<p>解析参数：</p>
			<p v-for="(value, key) in parsedParams" :key="key">{{ key }}: {{ value }}</p>
		</view>

		<!-- 扫码按钮 -->
		<button class="scan-btn" @click="startScan">开始扫码</button>
	</view>
</template>

<script>
	import {
		getHxCode
	} from '@/api/business.js';
	export default {
		data() {
			return {
				scanResult: null, // 存储扫码结果
				parsedParams: null // 存储解析后的参数
			};
		},
		methods: {
			startScan() {
				// 调用 uni.scanCode 方法进行扫码
				uni.scanCode({
					success: (res) => {
						console.log('扫码成功:', res);
						this.scanResult = res.result; // 将扫码结果存储到 data 中

						// 解析扫码结果中的 URL 参数
						try {
							this.parsedParams = this.parseQueryString(this.scanResult);

							// 调用核销接口
							this.handleHxCode();
						} catch (error) {
							console.error('解析URL失败:', error);
							this.parsedParams = null;
							uni.showToast({
								title: '解析二维码内容失败，请确认是否为有效链接',
								icon: 'none'
							});
						}
					},
					fail: (err) => {
						console.error('扫码失败:', err);
						uni.showToast({
							title: '扫码失败，请重试',
							icon: 'none'
						});
					}
				});
			},
			parseQueryString(urlString) {
				// 提取查询字符串部分
				const queryStartIndex = urlString.indexOf('?');
				if (queryStartIndex === -1) return {}; // 没有查询字符串

				const queryString = urlString.substring(queryStartIndex + 1);
				const params = {};

				queryString.split('&').forEach(pair => {
					if (!pair) return;

					const [key, value] = pair.split('=').map(decodeURIComponent);
					if (key) {
						params[key] = value || ''; // 如果没有值，默认为空字符串
					}
				});

				return params;
			},
			handleHxCode() {
				uni.showLoading({
					title: '核销中...'
				});

				getHxCode(this.parsedParams)
					.then(res => {
						uni.hideLoading();
						uni.showToast({
							title: '核销成功',
							icon: 'success' // 使用 success 图标表示成功
						});
					})
					.catch(error => {
						uni.hideLoading();
						uni.showToast({
							title: error.msg || '核销失败，请稍后再试', // 确保有默认消息
							icon: 'none'
						});
					});
			}
		}
	};
</script>

<style scoped>
	.container {
		padding: 20px;
		text-align: center;
	}

	.title {
		font-size: 24px;
		margin-bottom: 20px;
	}

	.result {
		margin-top: 20px;
		font-size: 18px;
		color: #333;
	}

	.parsed-params {
		margin-top: 20px;
		font-size: 16px;
		color: #555;
	}

	.scan-btn {
		background-color: #007AFF;
		color: white;
		padding: 10px 20px;
		border-radius: 5px;
		margin-top: 20px;
	}
</style>